package com.sugon.modules.analyse.model.vo;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.sugon.modules.analyse.consts.KpiTarget;
import com.sugon.modules.kpi.model.dto.KpiDeviceDTO;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @author ： YuXD
 * @description： 设备KPI统计参数VO
 * @date ： 2020-11-15 上午 9:47
 * @version: 1.0
 */
@Data
public class DeviceKpiStatParamVO implements Serializable {

    @NotNull(message = "设备组织等级必传")
    @Range(min = 1, max = 4, message = "非法设备组织等级！")
    private Integer level;

    @NotNull(message = "统计年度必选")
    private Integer yearly;

    @NotBlank(message = "设备组织必选")
    private String deviceOrganizationId;

    /**
     * 设备组织编码
     */
    private String deviceOrganizationCode;

    @NotEmpty(message = "KPI维度列表必选")
    private List<String> targetList;

    /**
     * KPI设备DTO列表
     */
    private List<KpiDeviceDTO> deviceIdLst;

    /**
     * 批量处理设备ID sql
     */
    private String batchDeviceIdSql;

    /**
     * 默认为今年
     *
     * @return
     */
    public Integer getYearly() {
        return yearly == null ? DateUtil.thisYear() : yearly;
    }

    /**
     * 如果KPI维度列表本身不为空，则直接返回
     * 否则根据level从KpiTarge中获取当前level所支持的所有维度
     *
     * @return
     */
    public List<String> getTargetList() {
        if (CollectionUtil.isNotEmpty(targetList)) {
            return targetList;
        }
        if (this.level == null) {
            this.level = 2;
        }
        return KpiTarget.getKpiTargetValueListByLevel(this.level);
    }
}
